var mysql = require("mysql"); //引入第三方模块

//创建连接池
var pool = mysql.createPool({
  host: "localhost",
  user: "root", //登录数据库用户名
  password: "root", //登录数据库密码
  port: 3306,
  database: "h52004", //数据库名
  multipleStatements: true, //允许创建多个连接对象
});

//写查询语句
// pool.query("SELECT * FROM user_inf", (err, res) => {
//   if (err) {
//     console.log(err);
//     return;
//   }

//   console.log(res); //[{},{}]
//   let str = JSON.stringify(res); //转成字符串打印
//   console.log(str);
// });

function query(sql) {
  //调用这个方法会返回一个promise对象
  return new Promise((resolve, reject) => {
    pool.query(sql, (err, res) => {
      if (err) {
        reject(err);
      } else {
        resolve(res);
      }
    });
  });
}

// let p = query("SELECT * FROM user_inf");
// p.then((res) => {
//   console.log(res);
// });

module.exports = query;

/*
    promise:解决回调地狱；解决异步代码的顺序问题；

    ajax({
        type : 'get',
        data : {},
        url : '',
        success : function(res) {
            ajax({
                type : 'get',
                data : {},
                url : '',
                success : function(res) {
                    
                }
            })
        }
    })


    let p = new Promise((resolve,reject) => {
        ajax({
            type : 'get',
            data : {},
            url : '',
            success : function(res) {
                resolve(res);
            },
            fail : function(err) {
                reject(err)
            }
        })
    })

    p.then(res => {
        //成功返回的数据
    }).catch(err => {
        //返回失败数据
    })

    function getData() {
        return new Promise((resolve,reject) => {
                ajax({
                    type : 'get',
                    data : {},
                    url : '',
                    success : function(res) {
                        resolve(res);
                    },
                    fail : function(err) {
                        reject(err)
                    }
                })
            })
    }

    //路由 promise比可避免还是有一层回调
    Router.user('/good',(req, res) => {
        let p = getData();
        p.then(res => {
            //成功返回的数据
        }).catch(err => {
            //返回失败数据
        })
    })

    //async await 是ES7的语法，能够把异步代码换成同步的写法，彻底的解决回调的问题；缺点：改成同步，会阻塞后面的代码，最好结合try catch使用；捕获不了失败的数据，借助catch捕获异常。
    Router.user('/good',async (req, res) => {
        try{
            let p = await getData();//p就是成功的数据：成功的解决回调的问题。把异步代码改成同步的写法；阻塞后面代码的执行

        }catch(err) {
            //打印失败 接收promise里面reject出来的数据
        }
        
    })

*/

// try {
//   let a = 8;
//   let c = a + 9;
//   console.log(c);
// } catch (err) {
//   console.log(err); //1
// }

// console.log(666); //2
